const path = require("path");
const express = require("express");
const cors = require("cors");
const morgan = require("morgan");
// 修改导入方式
const { expressjwt: expressJWT } = require('express-jwt');
const { init: initDB, User } = require("./database");
const Router = require('./server/routes/index');
const { secretKey } = require('./server/config/config')
const logger = morgan("tiny");

const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(cors());
app.use(logger);

app.use('/uploads', express.static('upload'));

app.use(expressJWT({ secret: secretKey, algorithms: ['HS256'] }).unless({
  // 全部路径不需要校验
  // path: '/*' // 匹配所有路径，不需要校验

  path: ['/apis/login', '/apis/register', '/apis/uploadFiles', '/apis/getPrice']
  // , '/apis/getDateRangeDish', '/apis/*', '/apis/getDishes',
  // '/apis/addDateDish', '/apis/uploadFiles', '/apis/uploadFiles', '/apis/addDish', '/apis/deleteDish', '/apis/updateDish'
  // , '/apis/orderDate'
}))

// 自定义中间件检查用户是否存在
async function checkUserExist(req, res, next) {
  if (req.user?.id) {
    const tempUser = await User.findOne({ where: { id: req.user.id } });
    if (tempUser?.dataValues) {
      next();
    }
    else {
      return res.send({
        status: 401,
        message: "用户不存在",
      });
    }
  } else {
    next();
  }
}

// 使用自定义中间件
app.use(checkUserExist);
app.use('/apis', Router);
app.get("/", async (req, res) => {
  res.sendFile(path.join(__dirname, "index.html"));
});

app.use((err, req, res, next) => {
  // 这次错误是由 token 解析失败导致的
  console.log(err);

  if (err.name === "UnauthorizedError") {
    res.status = 401;
    return res.send({
      status: 401,
      message: "无效的token",
    });
  }
  res.send({
    status: 500,
    message: "未知的错误",
  });
});
async function bootstrap() {
  await initDB();
  app.listen(3000, () => {
    console.log("server is running on port 3000");
  });
}

bootstrap();
// const express = require('express');
// const bodyParser = require('body-parser');
// const cors = require('cors');
// // 引入 dotenv 来加载环境变量
// const dotenv = require('dotenv');
// const Router = require('./server/routes/index');
// dotenv.config();

// // const recipeRoutes = require('./server/routes/recipeRoutes.js');
// // const uploadRoutes = require('./server/routes/upload.js');

// const app = express();

// // 中间件
// app.use(cors());
// app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: true }));
// app.use('/uploads', express.static('uploads'));

// // 路由
// // app.use('/api/recipes', recipeRoutes);
// // app.use('/api/upload', uploadRoutes);
// app.use('/apis', Router)
// app.get('/', async (req, res) => {
//   res.sendFile(path.join(__dirname, "index.html"));
// });

// // 错误处理
// app.use((err, req, res, next) => {
//   // 这次错误是由 token 解析失败导致的
//   console.log(err);

//   if (err.name === "UnauthorizedError") {
//     res.status = 401;
//     return res.send({
//       status: 401,
//       message: "无效的token",
//     });
//   }
//   res.send({
//     status: 500,
//     message: "未知的错误",
//   });
// });
// // 错误处理
// // app.use((err, req, res, next) => {
// //   console.error(err.stack);
// //   res.status(500).json({ error: '服务器错误' });
// // });



// module.exports = app;